package com.yitong.equipment.ui.mine

import android.content.Intent
import android.content.pm.ActivityInfo
import android.os.Bundle
import android.view.View
import com.blankj.utilcode.util.ToastUtils
import com.luck.picture.lib.PictureSelector
import com.luck.picture.lib.animators.AnimationType
import com.luck.picture.lib.config.PictureConfig
import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.style.PictureSelectorUIStyle
import com.luck.picture.lib.style.PictureWindowAnimationStyle
import com.luck.picture.lib.tools.SdkVersionUtils
import com.yitong.equipment.R
import com.yitong.equipment.base.BaseActivity
import com.yitong.equipment.constant.Constants
import com.yitong.equipment.databinding.ActivityUserInfoEditBinding
import com.yitong.equipment.network.oss.OSSService
import com.yitong.equipment.network.oss.OSSUploadInfo
import com.yitong.equipment.ui.viewmodel.UserEditViewModel
import com.yitong.equipment.utils.GlideUtils
import com.yitong.equipment.view.GlideEngine
import java.util.*

class UserInfoEditActivity : BaseActivity<UserEditViewModel, ActivityUserInfoEditBinding>(),
    View.OnClickListener {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_user_info_edit)
        initView()
    }

    private fun initView() {
        GlideUtils.loadImage(Constants.LOCAL_IMG_URL.url, bindingView!!.head)
        bindingView!!.head.setOnClickListener(this)
    }

    override fun onClick(v: View?) {
        when (v?.id) {
            R.id.head -> {
                // 进入相册
                PictureSelector.create(this@UserInfoEditActivity)
                    .openGallery(PictureMimeType.ofImage()) // 全部.PictureMimeType.ofAll()、图片.ofImage()、视频.ofVideo()、音频.ofAudio()
                    .imageEngine(GlideEngine().createGlideEngine()) // 外部传入图片加载引擎，必传项
                    .setPictureUIStyle(PictureSelectorUIStyle.ofDefaultStyle())
                    .setPictureWindowAnimationStyle(PictureWindowAnimationStyle.ofDefaultWindowAnimationStyle()) // 自定义相册启动退出动画
                    .isWeChatStyle(true) // 是否开启微信图片选择风格
                    .isUseCustomCamera(false) // 是否使用自定义相机
                    .isPageStrategy(true) // 是否开启分页策略 & 每页多少条；默认开启
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION) // 列表动画效果
                    .isWithVideoImage(true) // 图片和视频是否可以同选,只在ofAll模式下有效
                    .isMaxSelectEnabledMask(true) // 选择数到了最大阀值列表是否启用蒙层效果
                    .maxSelectNum(1) // 最大图片选择数量
                    .minSelectNum(1) // 最小选择数量
                    .maxVideoSelectNum(0) // 视频最大选择数量
                    .imageSpanCount(4) // 每行显示个数
                    .isReturnEmpty(false) // 未选择数据时点击按钮是否可以返回
                    .closeAndroidQChangeWH(true) //如果图片有旋转角度则对换宽高,默认为true
                    .closeAndroidQChangeVideoWH(!SdkVersionUtils.checkedAndroid_Q()) // 如果视频有旋转角度则对换宽高,默认为false
                    .setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) // 设置相册Activity方向，不设置默认使用系统
                    .isOriginalImageControl(false) // 是否显示原图控制按钮，如果设置为true则用户可以自由选择是否使用原图，压缩、裁剪功能将会失效
                    .selectionMode(PictureConfig.SINGLE) // 多选 or 单选
                    .isSingleDirectReturn(true) // 单选模式下是否直接返回，PictureConfig.SINGLE模式下有效
                    .isPreviewImage(false) // 是否可预览图片
                    .isPreviewVideo(false) // 是否可预览视频
                    .isEnablePreviewAudio(false) // 是否可播放音频
                    .isCamera(false) // 是否显示拍照按钮
                    .isZoomAnim(true) // 图片列表点击 缩放效果 默认true
                    .isEnableCrop(true) // 是否裁剪
                    .isCompress(true) // 是否压缩
                    .synOrAsy(false) //同步true或异步false 压缩 默认同步
                    .withAspectRatio(1, 1) // 裁剪比例 如16:9 3:2 3:4 1:1 可自定义
                    .hideBottomControls(true) // 是否显示uCrop工具栏，默认不显示
                    .isGif(false) // 是否显示gif图片
                    .glideOverride(120, 120)
                    .compressQuality(50)
                    .freeStyleCropEnabled(true) // 裁剪框是否可拖拽
                    .circleDimmedLayer(false) // 是否圆形裁剪
                    .showCropFrame(true) // 是否显示裁剪矩形边框 圆形裁剪时建议设为false
                    .showCropGrid(true) // 是否显示裁剪矩形网格 圆形裁剪时建议设为false
                    .isOpenClickSound(true) // 是否开启点击声音
                    .isDragFrame(false) // 是否可拖动裁剪框(固定)
                    .cutOutQuality(50) // 裁剪输出质量 默认100
                    .minimumCompressSize(100) // 小于多少kb的图片不压缩
                    .rotateEnabled(true) // 裁剪是否可旋转图片
                    .scaleEnabled(true) // 裁剪是否可放大缩小图片
                    .forResult(PictureConfig.CHOOSE_REQUEST) //结果回调onActivityResult code
            }

        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (resultCode == RESULT_OK) {
            if (requestCode == PictureConfig.CHOOSE_REQUEST || requestCode == PictureConfig.REQUEST_CAMERA) { // 图片选择结果回调
                val selectList = PictureSelector.obtainMultipleResult(data)
                selectList?.let {
                    uploadPhoto(selectList[0].compressPath)
                }
            }
        }
    }

    /**
     * 上传图片
     *
     * @param path 本地地址
     */
    private fun uploadPhoto(path: String) {
        val uploadInfo = OSSUploadInfo("", OSSUploadInfo.TYPE_LOCAL, path)
        getOssService().uploadFiles(
            listOf(uploadInfo),
            ArrayList(),
            object : OSSService.OnUploadListener {
                override fun onUpload(
                    resultList: List<OSSUploadInfo?>?,
                    currentIndex: Int,
                    totalSize: Int,
                    isSuccess: Boolean
                ) {
                    if (isSuccess && resultList != null) {
                        GlideUtils.loadImage(resultList[0]?.filePath, bindingView!!.head)
                    } else {
                        ToastUtils.showShort("图片上传失败!")
                    }
                }

            })
    }
}